package com.example.service.other;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import static com.example.entity.constant.redis.SeckillConstant.USER_KEY_PREFIX;

@Service
public class UserSeckillValidator {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 检查用户是否可以参与秒杀
     * @param userId 用户ID
     * @param goodsId 商品ID
     * @return 如果可以参与返回true，否则返回false
     */
    public boolean checkUser(Long userId, Long goodsId) {
        String userKey = USER_KEY_PREFIX + goodsId;
        // 原子操作：添加用户ID，成功则表示首次参与
        return redisTemplate.opsForSet().add(userKey, userId.toString()) > 0;
    }

    /**
     * 清除用户参与记录（失败时调用）
     * TODO: 如果允许抢多次，还需要redis设置用户成功抢对应商品的次数，上面checkUser方法需判断是否超抢（不是超卖）
     * @param userId 用户ID
     * @param goodsId 商品ID
     */
    public void clearUserRecord(Long userId, Long goodsId) {
        String userKey = USER_KEY_PREFIX + goodsId;
        redisTemplate.opsForSet().remove(userKey, userId.toString());
    }
}
